home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 47 / Amiga Format AFCD47 (Issue 131, Xmas 1999).iso / -serious- / misc / textdisplay / textdisplay.h < prev    next >
C/C++ Source or Header  |  1999-10-11  |  6KB  |  207 lines

  1. #ifndef TEXTDISPLAY_H
  2. #define TEXTDISPLAY_H
  3.  
  4. /*********************************************************
  5. **                                                      **
  6. **      TextDisplay MUI Class                           **
  7. **                                                      **
  8. **              ©1998-1999 Simone Tellini               **
  9. **                                                      **
  10. *********************************************************/
  11.  
  12.  
  13. /// Support stuff
  14. #ifndef REG
  15. #ifdef _DCC
  16. #define REG(x) __ ## x
  17. #else
  18. #define REG(x) register __ ## x
  19. #endif
  20. #endif
  21.  
  22. #ifndef ASM
  23. #if defined __MAXON__ || defined __STORM__ || defined _DCC
  24. #define ASM
  25. #else
  26. #define ASM __asm
  27. #endif
  28. #endif
  29.  
  30. #ifndef SAVEDS
  31. #ifdef __MAXON__
  32. #define SAVEDS
  33. #endif
  34. #if defined __STORM__ || defined __SASC
  35. #define SAVEDS __saveds
  36. #endif
  37. #if defined _GCC || defined _DCC
  38. #define SAVEDS __geta4
  39. #endif
  40. #endif
  41.  
  42.  
  43. #ifndef MAKE_ID
  44. #define MAKE_ID(a,b,c,d)    ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
  45. #endif
  46.  
  47. #ifndef TAGBASE
  48. #define TAGBASE ( TAG_USER | 0x776B0000 )
  49. #endif
  50.  
  51. #ifndef MIN
  52. #define MIN(a,b)    (( a < b ) ? ( a ) : ( b ))
  53. #endif
  54.  
  55. #ifndef MAX
  56. #define MAX(a,b)    (( a > b ) ? ( a ) : ( b ))
  57. #endif
  58.  
  59. #ifndef ABS
  60. #define ABS(a) (((a) > 0) ? (a) : -(a))
  61. #endif
  62. ///
  63. /// Externs
  64. ULONG SAVEDS ASM    TextDisplay_Dispatcher( REG( a0 ) struct IClass *, REG( a2 ) Object *, REG( a1 ) Msg );
  65. ULONG SAVEDS ASM    TextDisplayScroll_Dispatcher( REG( a0 ) struct IClass *, REG( a2 ) Object *, REG( a1 ) Msg );
  66.  
  67. extern struct MUI_CustomClass  *CL_TextDisplay;
  68. extern struct MUI_CustomClass  *CL_TextDisplayScroll;
  69. ///
  70.  
  71. #define TextDisplayObject   NewObject( CL_TextDisplayScroll->mcc_Class, 0
  72.  
  73. /*************************
  74. **      Methods         **
  75. *************************/
  76.  
  77. #define MUIM_TextDisplay_LoadFile       (TAGBASE + 1)
  78. #define MUIM_TextDisplay_Flush          (TAGBASE + 2)
  79. #define MUIM_TextDisplay_Scroll         (TAGBASE + 3)
  80. #define MUIM_TextDisplay_CopyToClip     (TAGBASE + 4)
  81. #define MUIM_TextDisplay_SetMark        (TAGBASE + 5)
  82. #define MUIM_TextDisplay_RedrawLine     (TAGBASE + 6)
  83.  
  84. /*************************
  85. **      Attributes      **
  86. *************************/
  87.  
  88. #define MUIA_TextDisplay_Scroller       (TAGBASE + 1)   /*  PRIVATE     i...  Object *              */
  89. #define MUIA_TextDisplay_FirstLine      (TAGBASE + 2)   /*              .sgn  ULONG                 */
  90. #define MUIA_TextDisplay_NumLines       (TAGBASE + 3)   /*              ..g.  ULONG                 */
  91. #define MUIA_TextDisplay_Size           (TAGBASE + 4)   /*              ..g.  ULONG                 */
  92. #define MUIA_TextDisplay_Lines          (TAGBASE + 5)   /*              ..g.  struct MinList *      */
  93. #define MUIA_TextDisplay_TextPen        (TAGBASE + 6)   /*              isg.  APTR                  */
  94. #define MUIA_TextDisplay_BackPen        (TAGBASE + 7)   /*              isg.  APTR                  */
  95. #define MUIA_TextDisplay_MarkPen        (TAGBASE + 8)   /*              isg.  APTR                  */
  96. #define MUIA_TextDisplay_ClipUnit       (TAGBASE + 9)   /*              isg.  UBYTE                 */
  97. #define MUIA_TextDisplay_AutoCopy       (TAGBASE + 10)  /*              isg.  BOOL                  */
  98. #define MUIA_TextDisplay_HideMark       (TAGBASE + 11)  /*              isg.  BOOL                  */
  99. #define MUIA_TextDisplay_Contents       (TAGBASE + 12)  /*              .sg.  STRPTR                */
  100. #define MUIA_TextDisplay_UseWinBorder   (TAGBASE + 13)  /*              i...  BOOL                  */
  101. #define MUIA_TextDisplay_TabSize        (TAGBASE + 14)  /*              i.g.  UWORD                 */
  102.  
  103. /*************************
  104. **      Values          **
  105. *************************/
  106.  
  107. #define MUIV_TextDisplay_Scroll_PageDown    -1
  108. #define MUIV_TextDisplay_Scroll_PageUp      -2
  109. #define MUIV_TextDisplay_Scroll_Top         0
  110. #define MUIV_TextDisplay_Scroll_Bottom      -3
  111.  
  112.  
  113. /*************************
  114. **      Structures      **
  115. *************************/
  116.  
  117. struct TextDisplayScrollData {
  118.         Object     *Display;
  119. };
  120.  
  121. struct DispLine {
  122.         STRPTR      Line;
  123.         ULONG       Length;
  124. };
  125.  
  126. #define CHUNK_SIZE      100
  127.  
  128. struct LinesChunk {
  129.         struct LinesChunk  *Succ;
  130.         struct LinesChunk  *Pred;
  131.         struct DispLine     Lines[ CHUNK_SIZE ];
  132. };
  133.  
  134. struct TextDisplayData {
  135.         Object             *Scroller;
  136.         struct IClass      *Notify;
  137.         UBYTE              *Buffer;
  138.         ULONG               Size;
  139.         APTR                Pool;
  140.         struct MinList      Lines;
  141.         ULONG               NumLines;
  142.         ULONG               DisplayedLines;
  143.         ULONG               First;          // first line showed
  144.         ULONG               Flags;
  145.         ULONG               XOffset;
  146.         ULONG               YOffset;
  147.         ULONG               StartX;
  148.         LONG                Direction;      // for scrolling
  149.         ULONG               OldWidth;
  150.         UBYTE               TextPen;
  151.         UBYTE               BackPen;
  152.         UBYTE               MarkPen;
  153.         UBYTE               Clipboard;      // clipboard unit
  154.         UWORD               TabSize;
  155.         APTR                TextPenSpec;
  156.         APTR                BackPenSpec;
  157.         APTR                MarkPenSpec;
  158.         ULONG               MarkLineStart;
  159.         ULONG               MarkLineEnd;
  160.         UWORD               MarkColStart;
  161.         UWORD               MarkColEnd;
  162.         ULONG               RedrawLine;
  163. };
  164.  
  165. #define TD_GO_UP        (1 << 0)
  166. #define TD_GO_DOWN      (1 << 1)
  167. #define TD_WORDWRAP     (1 << 2)
  168. #define TD_MARK         (1 << 3)
  169. #define TD_MARKED       (1 << 4)
  170. #define TD_REDRAWLINE   (1 << 5)
  171. #define TD_CLEARMARK    (1 << 6)
  172. #define TD_AUTOCOPY     (1 << 7)
  173. #define TD_HIDEMARK     (1 << 8)
  174. #define TD_DONTFREE     (1 << 9)
  175. #define TD_NEWTEXTPEN   (1 << 10)
  176. #define TD_NEWBACKPEN   (1 << 11)
  177. #define TD_NEWMARKPEN   (1 << 12)
  178. #define TD_DISPOSING    (1 << 13)
  179.  
  180. #define TD_PREFSMASK    ( TD_AUTOCOPY | TD_HIDEMARK )
  181.  
  182. struct MUIP_TextDisplay_LoadFile {
  183.         ULONG       MethodID;
  184.         STRPTR      FileName;
  185. };
  186.  
  187. struct MUIP_TextDisplay_Scroll {
  188.         ULONG       MethodID;
  189.         ULONG       FirstLine;
  190. };
  191.  
  192. struct MUIP_TextDisplay_RedrawLine {
  193.         ULONG       MethodID;
  194.         ULONG       Line;
  195. };
  196.  
  197. struct MUIP_TextDisplay_SetMark {
  198.         ULONG       MethodID;
  199.         ULONG       LineStart;
  200.         ULONG       LineEnd;
  201.         ULONG       ColStart;
  202.         ULONG       ColEnd;
  203. };
  204.  
  205.  
  206. #endif  /* TEXTDISPLAY_H */
  207.